//----------------------------------------------------------------------------------
// CProcess class
// Author: Oscar Serrano
//
// Description:
// Clase abstracta encargada de ofrecer la interfaz comun de todo proceso generico, los diferentes
// juegos que programemos seran clases derivadas de esta, como tambien las aplicacions viewer, tests, etc.
//----------------------------------------------------------------------------------

#pragma once

#ifndef INC_PROCESS_H
#define INC_PROCESS_H

#include "Utils\Types.h"
#include "Utils\Base.h"


class CRenderManager;
class CFontManager;
class CCamera;

class CProcess
{
public:
	CProcess							();
	virtual			~CProcess			();


	virtual void	Init				()												= 0;
	virtual void	DeInit				()												= 0;
	virtual void	Update				(float dt)										= 0;
	virtual void	RenderScene			(CRenderManager* RM)						= 0;
	virtual void	RenderScene2D		(CRenderManager* RM, CFontManager* FM)	= 0;
	virtual uint32	RenderDebugInfo		(CRenderManager* RM, CFontManager* FM, float FPS);
	
	void			SwapDebugInfo		()					{m_bDebugInfo = !m_bDebugInfo;}
	bool			GetDebugInfo		()					{return m_bDebugInfo;}

	CCamera*		GetCamera			()					{return m_pCamera;}
	void			SetCamera			(CCamera* camera)   {m_pCamera = camera;}

private:


protected:
	bool			m_bDebugInfo;
	CCamera*		m_pCamera;
};

#endif //INC_PROCESS_H
